#include <iostream>
#include <string.h>
#include <math.h>
using namespace std;
const int inf=0x7fffffff;


int cac(int x,int y,int t,int w,int h,int *dp){
//	if(dp[t*w*h+x*h+y] >= 10)
//		cout<<"[error]"<<x<<" "<<y<<" "<<t<<endl;
	return dp[t*w*h+x*h+y];
}



int mx(int x,int y,int t,int w,int h,int *dp){
	if(x == 0  &&  y == 0){
		return max(cac(x+1,y,t,w,h,dp),cac(x,y+1,t,w,h,dp));
	}
	if(x == w-1  &&  y == h-1){
		return max(cac(x-1,y,t,w,h,dp),cac(x,y-1,t,w,h,dp));
	}
	if(x == 0  &&  y == h-1){
		return max(cac(x+1,y,t,w,h,dp),cac(x,y-1,t,w,h,dp));
	}
	if(x == w-1  &&  y == 0){
		return max(cac(x-1,y,t,w,h,dp),cac(x,y+1,t,w,h,dp));
	}
	if(x == 0){
		return max(cac(x,y-1,t,w,h,dp),max(cac(x+1,y,t,w,h,dp),cac(x,y+1,t,w,h,dp)));
	}
	if(x == w-1){
		return max(cac(x,y-1,t,w,h,dp),max(cac(x-1,y,t,w,h,dp),cac(x,y+1,t,w,h,dp)));
	}
	if(y == 0){
		return max(cac(x-1,y,t,w,h,dp),max(cac(x+1,y,t,w,h,dp),cac(x,y+1,t,w,h,dp)));
	}
	if(y == h-1){
		return max(cac(x-1,y,t,w,h,dp),max(cac(x+1,y,t,w,h,dp),cac(x,y-1,t,w,h,dp)));
	}
	return max(max(cac(x+1,y,t,w,h,dp),cac(x,y+1,t,w,h,dp)),max(cac(x-1,y,t,w,h,dp),cac(x,y-1,t,w,h,dp)));
}


int main(){
	int ans = inf;
	int h,w,t,sx,sy;
	cin>>h>>w>>t>>sx>>sy;
	sx--;
	sy--;
	int n,m;
	cin>>n>>m;
	int map[w][h][t];
	memset(map,-1,sizeof(map));
	for(int i=0;i<n;i++){
		int t1,t2;
		int can;
		cin>>t1>>t2;
		t1--;
		t2--;
		cin>>can;
		for(int i=t1;i<t2;i++){
			int x,y;
			cin>>x>>y;
			x--;
			y--;
			map[x][y][i] = can;
		}
	}
//	for(int l=0;l<t;l++){
//		cout<<"[time]"<<l<<endl;
//		for(int i=0;i<w;i++){
//			for(int j=0;j<h;j++){
//				cout<<map[i][j][l]<<" ";
//			}
//			cout<<endl;
//		}
//	}
	
	
	int dp[t][w][h];
	memset(dp,-1,sizeof(dp));
	dp[0][sx][sy] = 0;
	for(int l=1;l<t;l++){
		for(int k=min(ans-1,l);k>=1;k--){
			for(int i=0;i<w;i++){
				for(int j=0;j<h;j++){
					if(dp[k][i][j] == m)
						continue;
					dp[k][i][j] = max(dp[k][i][j],mx(i,j,k-1,w,h,&dp[0][0][0]));
					if(dp[k][i][j] == -1  ||  map[i][j][l] == -1)
						continue;
					if(map[i][j][l] == 1)
						dp[k][i][j]++;
					else
						dp[k][i][j] = -1;
					if(dp[k][i][j] == m)
						ans = min(ans,k);
				}
			}
		}
//		cout<<"[time]"<<l<<endl;
//		for(int k=0;k<t;k++){
//			for(int i=0;i<h;i++){
//				for(int j=0;j<w;j++){
//					cout<<dp[k][j][i]<<" ";
//				}
//				cout<<endl;
//			}
//			cout<<endl;
//		}
	}
	if(ans == inf)
		cout<<-1;
	else
		cout<<ans;
	return 0;
}
